import axios from "axios";

export default function baseConfig(instance) {
  instance.defaults.baseURL = "";
  instance.defaults.timeout = 60000;

  instance.defaults.validateStatus = (status) => status >= 200 && status < 300;

  // 拦截器
  instance.interceptors.request.use(
    (config) => {
      config.headers["csrf-token"] = localStorage.getItem("token") || "zdy";
      return config;
    },
    (err) => {
      return process.reject(err);
    }
  );

  // 响应拦截器: 请求结束(返回一个promise实例), 在即将执行我们说的then/catch之前, 触发响应拦截器
  instance.interceptors.response.use(
    (response) => {
      return response.data;
    },
    (reason) => {
      let status = reason?.response?.status,
        code = reason?.code;
      if (status) {
        // 服务器有返回结果, 但是状态码没见过validateStatus校验
        switch (+status) {
          case 404:
            console.log("请求地址不存在, 请更正~~~");
            break;
          case 403:
            // cookie中的verifyToken与cookie不匹配, 需要重新获取向原生ios的cookie
            break;
          case 500:
            console.log("服务器发生未知错误, 请联系管理员~~");
            break;
        }
      } else if (code === "ECONNABORTED") {
        // 请求超时
        console.log("当前请求已超时, 请稍后重试");
      } else if (axios.isCancel(reason)) {
        // 请求中断
        console.log("当前请求被中断, 请检查代码~~~");
      } else {
        // 断网处理
        console.log("当前网络异常, 请稍后重试");
      }

      // 提示过后, 还是继续执行用户自己设定的catch方法
      return Promise.reject(reason);
    }
  );
}
